import os
import unittest

# todo  HTMLTestRunner 不是用过pip安装，可把原文件放在项目目录 或者 python库的lib里面
from basic.class18_unitest import HTMLTestRunner

import time


# 1. 测试套件初始化 TestLoader()
from basic.class18_unitest.test_case import test_login2, test_assert2
from basic.class18_unitest.test_case.test_assert2 import TestAsert
from basic.class18_unitest.test_case.test_login2 import TestLogin

testLoader = unittest.TestLoader()


# 2.收集测试用例，查找测试用例
dir_path = os.path.dirname(os.path.abspath(__file__))
case_Path = os.path.join(dir_path,"test_case")
# testloader 收集测试用例，discover（文件夹路径，‘test_*.py’）
# 没有放在文件夹内的 都不会被发现

# suit = testLoader.discover(case_Path)
# todo 只运行某个模块 里面的测试用例
# suit = testLoader.loadTestsFromModule(test_login2)
# # 如果想运行 2 个或以上的测试模块
# suit2 = testLoader.loadTestsFromModule(test_assert2)
# # 把这两个测试套件 合并
# suit_total = unittest.TestSuite()
# suit_total.addTests(suit)
# suit_total.addTests(suit2)

# todo 只运行某个类
suit = testLoader.loadTestsFromTestCase(TestLogin)
suit2 = testLoader.loadTestsFromTestCase(TestAsert)
# 合并
suit_add = unittest.TestSuite()
suit_add.addTests(suit)
suit_add.addTests(suit2)

# 3.测试用例运行 testtxtrunner
report_path = os.path.join(dir_path,"report")
# 如果没有这个文件，就创建
if not os.path.exists(report_path):
    os.mkdir(report_path)

# 根据时间戳 生成不同文件名的 测试报告
ts = str(int(time.time()))   # 不需要精确到小数
htmlname = 'htmlname_{}.html'.format(ts)
file_path = os.path.join(report_path,htmlname)


# 写入文件
with open(file_path,'wb') as f:
    # 使用htmltestruner
    runner = HTMLTestRunner.HTMLTestRunner(f,verbosity=2,title="测试报告",description="描述",)
    runner.run(suit_add)